package com.lh.tams.service.system;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import com.lh.tams.dao.LimitDao;
import com.lh.tams.dao.ModuleDao;
import com.lh.tams.dao.system.PersonDao;
import com.lh.tams.dao.system.RoleDao;
import com.lh.tams.domain.TamsLimit;
import com.lh.tams.domain.TamsModule;
import com.lh.tams.domain.TamsPerson;
import com.lh.tams.domain.TamsRole;
import com.lh.tams.exception.BusinessException;
import com.lh.tams.util.DataGridModel;
import com.lh.tams.util.ID;
import com.lh.tams.util.Page;

@Service
public class RoleService {
	private RoleDao roleDao;
	private LimitDao limitDao;
	private ModuleDao moduleDao;

	private PersonDao personDao;

	public RoleDao getRoleDao() {
		return roleDao;
	}

	public void setRoleDao(RoleDao roleDao) {
		this.roleDao = roleDao;
	}

	public void setLimitDao(LimitDao limitDao) {
		this.limitDao = limitDao;
	}

	public void setModuleDao(ModuleDao moduleDao) {
		this.moduleDao = moduleDao;
	}

	public void setPersonDao(PersonDao personDao) {
		this.personDao = personDao;
	}
	
	public Page query(DataGridModel dgm,TamsRole role){
		return roleDao.query(dgm, role);
	}
	
	public void add(TamsRole role){
		//查询是否存在重复角色名称
		if(roleDao.query(role.getRoleName(),role.getIdBgt())){
			throw new BusinessException("该角色名称已存在");
		}
		
		roleDao.add(role);
	}
	
	public void update(TamsRole role){
		//查询是否存在重复角色名称
		if(roleDao.query(role.getRoleName(),role.getIdBgt())){
			throw new BusinessException("该角色名称已存在");
		}
		
		roleDao.update(role);
	}
	
	public void delete(long[] ids){
		//查询角色下的所有警员
		List<TamsPerson> list= new ArrayList<TamsPerson>();
		for (int i = 0; i < ids.length; i++) {
			List<TamsPerson> l = roleDao.queryPersonIdByRole(ids[i]);
			list.addAll(l);
		}
//		long[] personIds = new long[list.size()];
//		for(int i=0;i<list.size();i++){
//			personIds[i] = list.get(0).getIdBgt();
//		}
//		//删除角色下的所有警员
//		personDao.delete(personIds);
		if(list.size()>0){
			throw new BusinessException("角色下存在警员，请先删除该角色下的警员!");
		}
		//删除角色
		roleDao.delete(ids);
	}
	
	/**
	 * 根据角色id查询模块
	 * @param roleId
	 * @return
	 */
	public List<TamsModule> queryModule(long roleId){
		List<TamsLimit> list=limitDao.query(roleId);
		List<TamsModule> modules=new ArrayList<TamsModule>();
		for(int i=0;i<list.size();i++){
			modules.add(list.get(i).getTamsModule());
		}
		return modules;
	}
	
	/**
	 * 设置角色权限
	 * @param roleId
	 * @param moduleId
	 */
	public void limit(long roleId,long[] moduleId){
		List<TamsLimit> list=limitDao.query(roleId);
		if(list.size()>0){
			long[] ids=new long[list.size()];
			for(int i=0;i<list.size();i++){
				ids[i]=list.get(i).getIdBgt();
			}
			limitDao.delete(ids);//先删除原来的权限
		}
		//增加新的权限
		TamsRole role=roleDao.load(roleId);
		for(int i=0;i<moduleId.length;i++){
			TamsModule module=moduleDao.load(moduleId[i]);
			TamsLimit limit=new TamsLimit();
			limit.setIdBgt(ID.next());
			limit.setTamsModule(module);
			limit.setTamsRole(role);
			limitDao.add(limit);
		}
		
		
	}
}
